{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "9815cbd2-1223-4809-9090-b1a3fbbac5d2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>账户资金（元）</th>\n",
       "      <th>最后一次交易距今时间（天）</th>\n",
       "      <th>上月交易佣金（元）</th>\n",
       "      <th>累计交易佣金（元）</th>\n",
       "      <th>本券商使用时长（年）</th>\n",
       "      <th>是否流失</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>22686.5</td>\n",
       "      <td>297</td>\n",
       "      <td>149.25</td>\n",
       "      <td>2029.85</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>190055.0</td>\n",
       "      <td>42</td>\n",
       "      <td>284.75</td>\n",
       "      <td>3889.50</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>29733.5</td>\n",
       "      <td>233</td>\n",
       "      <td>269.25</td>\n",
       "      <td>2108.15</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>185667.5</td>\n",
       "      <td>44</td>\n",
       "      <td>211.50</td>\n",
       "      <td>3840.75</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>33648.5</td>\n",
       "      <td>213</td>\n",
       "      <td>353.50</td>\n",
       "      <td>2151.65</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    账户资金（元）  最后一次交易距今时间（天）  上月交易佣金（元）  累计交易佣金（元）  本券商使用时长（年）  是否流失\n",
       "0   22686.5            297     149.25    2029.85           0     0\n",
       "1  190055.0             42     284.75    3889.50           2     0\n",
       "2   29733.5            233     269.25    2108.15           0     1\n",
       "3  185667.5             44     211.50    3840.75           3     0\n",
       "4   33648.5            213     353.50    2151.65           0     1"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "df = pd.read_excel('股票客户流失.xlsx')\n",
    "df.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "2f2860bc-46ea-4844-b33f-c6e9254f5d89",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5174"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "count = df[df['是否流失'] == 0].shape[0]\n",
    "count"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "3f38fccc-95c2-45b1-b0e3-bee6e4d6ab9f",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1869"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "count = df[df['是否流失'] == 1].shape[0]\n",
    "count"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e066023b-f178-4e65-ab15-ef5a3d62de9e",
   "metadata": {},
   "source": [
    "数量差距不会很大，不用平衡化处理，但对类别为1的识别较为重要"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "025d25bf-e362-4ab8-828d-3420f187f614",
   "metadata": {},
   "source": [
    "是分类模型，最后一列为标签0和1 其他为特征，需要训练模型通过相关特征判断所属类别"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "50a804be-c055-4d94-b55b-2e16ebf1363c",
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df.drop(columns='是否流失') \n",
    "y = df['是否流失']   "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7cf8cd0d-ab03-4c83-a274-b997701990dd",
   "metadata": {},
   "source": [
    "按照8:2划分训练集和测试集，训练模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "4dabe665-7e59-4267-b6ea-b483ab5439bc",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "158445ae-3743-4775-a839-0ad07f68c78c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: start;\n",
       "  justify-content: space-between;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LogisticRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LogisticRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.6/modules/generated/sklearn.linear_model.LogisticRegression.html\">?<span>Documentation for LogisticRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\"><pre>LogisticRegression()</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "LogisticRegression()"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "model = LogisticRegression()\n",
    "model.fit(X_train, y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "d5aad7cc-5682-47c3-80b5-c31b89b2407f",
   "metadata": {},
   "outputs": [],
   "source": [
    "y_pred = model.predict(X_test)\n",
    "y_pred_proba = model.predict_proba(X_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "98bbe748-076c-45ea-9a8e-914bc68a2b77",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[0.82041509, 0.17958491],\n",
       "       [0.84029656, 0.15970344],\n",
       "       [0.7981937 , 0.2018063 ],\n",
       "       ...,\n",
       "       [0.95779474, 0.04220526],\n",
       "       [0.90217585, 0.09782415],\n",
       "       [0.36413188, 0.63586812]], shape=(1409, 2))"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_pred_proba"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "a5493a67-3b1a-46e4-a799-18b65f138729",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      0.91      0.87      1061\n",
      "           1       0.63      0.45      0.52       348\n",
      "\n",
      "    accuracy                           0.80      1409\n",
      "   macro avg       0.73      0.68      0.70      1409\n",
      "weighted avg       0.78      0.80      0.79      1409\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import classification_report\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "02506aca-b4a1-4ded-a909-72741cf79780",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.metrics import roc_curve\n",
    "fpr, tpr, thres = roc_curve(y_test, y_pred_proba[:,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "adb6ff58-3188-4c00-b79e-cf9d00cb2aa7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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2c5hZsSIEXUOM/v375dRo0bJ2LFjZc2aNfpn9bJly1xep0qsqMHHH3/siIyMdBw6dEjvr1271nHuuefWes5dd93lGDp0qLH/7LPPOh588EGX1+pt13nmzJmO1atXG/tTp051XHzxxS6v1duuc6UVK1Y4Gjdu7IiOjnZkZGS4uFLvvM67du1yREREOJYuXWpCld55ncePH+948cUXjf3p06c7xo4d6/Ja7e6CCy5wPPfcc6r5q07//2fPnu3o0KGDo6KiQu9/8sknjquvvtrlddJCU4vU1FTp27evhIaG6v2EhAT9W8CJzjn//PON/d69e0tycrLLa/W263zffffJ2Wefbeyr37ratm3r8lq97TpX/iZ86623yvPPPy/169c3oVLvvM4TJ07Ut6rVAn+rV682oVLvu86dO3eWN998U/bu3Svbtm2Td955R4YMGWJSxfb1+uuvn1Srofq7GTRokLEYtFmfgwSaE6wgqu4ZVlJ/OX5+fpKVlVXnc9RCXWqlbzj3Ole1adMm+fjjj+WWW25xYZXee51nzJgh7dq1kzFjxphQpXdeZ9Us//777+tFdLds2SLXXXedTJgwwaSKvec633TTTZKfny9NmzaVVq1a6fPVtUbtql7nurDqc5BAUwt/f/9jpnIODg6WgoKCOp9zouNxate5aifKG264Qf+gUr99wbnXWfVNUv06Xn75ZRMq9N7rrH4D7tOnj3z22Wfy6KOPyrfffisvvfQS/e+cfJ2fe+453RlYtc5s375dysrKdN8wOJdVn4MEmlqonvCqc1NVaiRNYGBgnc850fE4tetc6bHHHpODBw/K008/7cIKvfM6qxEhqtVr+vTpesQeXPfveefOnTJs2DCjiT4uLk4aNWqkW2vgvOusOqeqANOiRQt9jVWH4Llz55pQrXeJsuhzkEBTCzUcUDUFV8rIyND9CdRfVl3PUb3pY2NjXV6rt11n5dNPP9XDAT/88EPjPjqcd53Vb7CrVq3SHwDqt1r1UK+pvgpvvfWWiZV7/r9ndaup6vBhdVtEBXV+djj3OqsW3X379hn7atReeXm5y2v1Nr2s+hx0ebdjGystLXU0atTI8cYbb+j9m266yTFixAi9nZWV5SgrKzvmHNXTvl69eo5ff/3VkZeX5+jevbvj3//+t+m1e/p1TktL09d5/vz5+jqrR+VoBzjnOqvj1YiGqo/Y2FjHypUr9fWG8/49f/XVV3oE2TfffOPYunWr49prr3V06dLFGCUC51xnNcqpTZs2jnnz5jleffVVxxlnnOG46qqrTK/dro4e5ZSTk+MoKSk55rj9+/c7goODHV9//bV+/6KLLnJMmDDB9fW5/DvY3KJFixyhoaH6h436z7NhwwbjLzYlJeW45zzwwAOOwMBAR3h4uKNnz56OgoICk6v2/Os8ceJE/V7VR8uWLS2o3PP/PVelrjHDtl1znefMmeNo27at/iDo27evY+PGjSZX7fnXWQUdFRbVseo6X3LJJfrDF6cWaNTPAzV8/nhefvllR0BAgB5aHx8f78jMzHS4ms9fRaIWqllSDTlTQwSjo6PrdI4aPrhr1y4ZOHAgfWhceJ1x8rjO5uA6m4Pr7L4yMjJk48aN0r9/f1OmfCDQAAAA26NTMAAAsD0CDQAAsD0CDQAAsD0CDQAAsD0CDQAAsD0CDQC3lZiYqJcDOPoxZ84cY1utE6OG7CYlJelzHnnkEeO9sLAwvaTAH3/8YfUfBYCLEWgAuLUuXbroFZSrPqq+vnnzZrn44ovlkksuMRbAUyFGvVcZcq655hpL/wwAXI9AA8Ct+fn5GWtJVT7Uar6Vr6t1kB5++GG9AF5qaqo+JyAgQL/Xvn17vd7XDz/8wKr3gIcj0ADwCCrglJSUHPN6SEiIXjm86uKPADwPgQaAW1u3bl211hm1f/QKyqqvjQot3bt3r/ZeWVmZPPvss9KuXTumxQc8nL/VBQBAbdRto//973/GfkxMjF67pzLoqFtJUVFR8uabb0pERIQ+5vPPP9fvFRUVSbNmzeTdd9+18E8AwAwEGgBuTS3u2qpVqxqDjhrl1LRp02rvDRo0SF577TWZNGmSvuXUu3dvEysGYAVuOQGwddA5OswooaGh+r3HH39c3n//fUlPT7ekRgDmIdAA8FgdO3aUMWPGyGOPPWZ1KQBcjEADwKOpifY++OADWmkAD+fjUEMDAAAAbIwWGgAAYHsEGgAAYHsEGgAAYHsEGgAAYHsEGgAAYHsEGgAAYHsEGgAAYHsEGgAAYHsEGgAAYHsEGgAAIHb3/1PEw3swZYVxAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif'] = ['SimHei']\n",
    "plt.plot(fpr, tpr)\n",
    "plt.title('ROC曲线')\n",
    "plt.xlabel('FPR')\n",
    "plt.ylabel('TPR') \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "e38cc2ca-dc21-4f25-8a3e-722941ebc4f1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "np.float64(0.8103854528908967)"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.metrics import roc_auc_score\n",
    "score = roc_auc_score(y_test, y_pred_proba[:,1])\n",
    "score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f45e2147-ebe8-40e2-b1ea-c8b726f2ebf4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(thres[1:], tpr[1:])\n",
    "plt.plot(thres[1:], fpr[1:])\n",
    "plt.plot(thres[1:], tpr[1:] - fpr[1:])\n",
    "plt.xlabel('threshold')\n",
    "plt.legend(['tpr', 'fpr', 'tpr-fpr'])\n",
    "plt.gca().invert_xaxis() \n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "d66b9e5d-e92d-4b38-a504-c280247fdbfc",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "id": "9e4b3eaf-352d-4f77-a228-4daf51f293c8",
   "metadata": {},
   "source": [
    "多使用几种模型看看效果"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3b17e805-d886-42c1-9d4e-c8c585b9e2c8",
   "metadata": {},
   "source": [
    "随机森林"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "9b6505db-6d74-4814-a3ab-8757d79ba7bb",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      0.86      0.85      1061\n",
      "           1       0.52      0.46      0.49       348\n",
      "\n",
      "    accuracy                           0.76      1409\n",
      "   macro avg       0.68      0.66      0.67      1409\n",
      "weighted avg       0.75      0.76      0.76      1409\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.ensemble import RandomForestClassifier\n",
    "from sklearn.metrics import classification_report\n",
    "model = RandomForestClassifier(n_estimators=100, random_state=42)\n",
    "\n",
    "model.fit(X_train, y_train)\n",
    "\n",
    "y_pred = model.predict(X_test)\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8fd4bd81-428c-483f-8b6e-845db5bd4026",
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c063b316-6968-455f-b21d-6ee9df3fb9e1",
   "metadata": {},
   "outputs": [],
   "source": [
    "决策树"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "21feda0d-a309-424c-ab54-2f20ccb28e16",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.84      0.90      0.87      1061\n",
      "           1       0.62      0.49      0.55       348\n",
      "\n",
      "    accuracy                           0.80      1409\n",
      "   macro avg       0.73      0.70      0.71      1409\n",
      "weighted avg       0.79      0.80      0.79      1409\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.metrics import classification_report\n",
    "model = DecisionTreeClassifier(max_depth=5, random_state=42)\n",
    "model.fit(X_train, y_train)\n",
    "y_pred = model.predict(X_test)\n",
    "print(classification_report(y_test, y_pred))    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "18b85770-3c2e-412a-b337-ec531683a34d",
   "metadata": {},
   "outputs": [],
   "source": [
    "KNN"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "a1485d3b-7b4c-420a-ae6e-1f998fa0c820",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.84      0.88      0.86      1061\n",
      "           1       0.57      0.50      0.53       348\n",
      "\n",
      "    accuracy                           0.78      1409\n",
      "   macro avg       0.71      0.69      0.70      1409\n",
      "weighted avg       0.78      0.78      0.78      1409\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.neighbors import KNeighborsClassifier\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import classification_report\n",
    "\n",
    "scaler = StandardScaler()\n",
    "X_train_scaled = scaler.fit_transform(X_train)\n",
    "X_test_scaled = scaler.transform(X_test)\n",
    "\n",
    "model = KNeighborsClassifier(n_neighbors=5)\n",
    "model.fit(X_train_scaled, y_train)\n",
    "y_pred = model.predict(X_test_scaled)\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0a106f9d-edfa-4d18-b516-a5366a807ac7",
   "metadata": {},
   "outputs": [],
   "source": [
    "支撑向量机"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "2b3edcbe-70a2-46be-8ff9-765118e6752d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.83      0.93      0.87      1061\n",
      "           1       0.65      0.40      0.50       348\n",
      "\n",
      "    accuracy                           0.80      1409\n",
      "   macro avg       0.74      0.66      0.68      1409\n",
      "weighted avg       0.78      0.80      0.78      1409\n",
      "\n"
     ]
    }
   ],
   "source": [
    "from sklearn.svm import SVC\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import classification_report\n",
    "\n",
    "scaler = StandardScaler()\n",
    "X_train_scaled = scaler.fit_transform(X_train)\n",
    "X_test_scaled = scaler.transform(X_test)\n",
    "\n",
    "model = SVC(random_state=42)\n",
    "model.fit(X_train_scaled, y_train)\n",
    "y_pred = model.predict(X_test_scaled)\n",
    "print(classification_report(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "5775c25c-224b-417a-8506-de47b4e02eab",
   "metadata": {},
   "outputs": [],
   "source": [
    "综合来看，决策树模型效果更好一些"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3c67a1b6-22a6-4ad0-9b2a-502a2bdbe408",
   "metadata": {},
   "outputs": [],
   "source": [
    "可以选择模型进行参数调优"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
